import { createStore } from 'vuex'
import { login, getinfo } from '~/api/manager'
import { setToken, removeToken } from '~/composables/auth'

// 创建一个新的 store 实例
const store = createStore({
	state() {
		return {
			// 用户信息
			user: {},

			// 侧边宽度
			asideWidth: "250px",

			menus: [],
			ruleNames: []
		}
	},

	// 同步操作
	mutations: {
		// 记录用户信息
		SET_USERINFO(state, user) {
			state.user = user
		},

		// 展开/缩起侧边
		handleAsideWidth(state) {
			state.asideWidth = state.asideWidth == "250px" ? "64px" : "250px"
		}
		,

		// 菜单列表
		SET_MENUS(state, menus) {
			state.menus = menus
		},

		// 角色列表
		SET_RULENAMES(state, ruleNames) {
			state.ruleNames = ruleNames
		}
	},

	// 异步操作
	actions: {
		// 登录
		login({ commit }, { username, password }) {
			return new Promise((resolve, reject) => {
				login(username, password).then(res => {
					setToken(res.token)
					resolve(res)
				}).catch(err => reject(err))
			})
		},

		//获取当前登录用户信息
		getInfo({ commit }) {
			return new Promise((resolve, reject) => {
				getinfo().then(res => {
					commit("SET_USERINFO", res)
					commit("SET_MENUS", res.menus)
					commit("SET_RULENAMES", res.ruleNames)
					resolve(res)
				}).catch(err => reject(err))
			})
		},

		//退出登录
		logout({ commit }) {
			// 移除cookie里的token
			removeToken()
			// 清楚当前用户状态vuex
			commit('SET_USERINFO', {})
		}
	}
})

export default store
